package com.atguigu.gulimall.product;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/*
  1.整合mybatis-plus
       1）导入依赖
         <dependency>
              <groupId>com.baomidou</groupId>
              <artifactId>mybatis-plus-boot-starter</artifactId>
              <version>3.2.0</version>
          </dependency>
       2）配置
           1、配置数据源
               1）导入数据库驱动
                   <dependency>
                        <groupId>com.mysql</groupId>
                        <artifactId>mysql-connector-j</artifactId>
                        <version>8.0.33</version>
                   </dependency>
               2）在application.yml配置相关信息
           2、配置mybatis-plus
               1）使用@MapperScan
               2）告诉mybatis-plus，sql的映射文件位置
   2.逻辑删除
   操作步骤：https://baomidou.com/pages/6b03c5/#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95
   步骤 1: 配置com.baomidou.mybatisplus.core.config.GlobalConfig$DbConfig
    例如application.yml
   mybatis-plus:
    global-config:
        db-config:
            logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
            logic-delete-value: 1 # 逻辑已删除值(默认为 1)
            logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
   步骤 2: 实体类字段上加上@TableLogic注解
    @TableLogic
    private Integer deleted;
   3.JSR303
    1）给bean加上校验注解：javax.validation.constraints，并定义自己的message提示
    2）开启校验功能@valid
        效果：校验失败后默认相应
    3）方案1：给校验的bean后面紧跟一个BindingResult,可以得到校验的结果
    4）方案2：全局异常处理参考：com/atguigu/gulimall/product/exception/GuliMallExceptionControllerAdvice.java
        4.1）分组校验（多场景的复杂校验）
           1）给校验标注什么情况下需要校验@NotEmpty(message = "检索首字母不能为空", groups = AddGroup.class)
           2）默认没指定分组的校验，在@Validated生效，在@Validated(AddGroup.class)不生效
           3）@Validated：例如@NotEmpty(message = "检索首字母不能为空", groups = AddGroup.class)不生效
        4.2）自定义校验：
           1）写一个校验注解参考：com.atguigu.common.valid.ListValue
           2）写一个对应的校验器参考：com.atguigu.common.valid.ListValueConstraintValidator
           3）关联校验注解和检验器，一个注解可以关联多个校验器，校验注解其次适配多个校验器，按照参数类型找到对应的校验器。

 */
/*
1.controller:用来处理请求，进行校验
2.service：接受controller传来的数据，进行业务处理
3.controller：接受service处理完的数据，封装成页面指定的vo
 */
/*
服务想要调用别的服务的方法，最好注入其他舒服的service,而不是dao,因为service更容易拓展，dao是mybatis自动生成的，不容易拓展
 */
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.atguigu.gulimall.product.feign")
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}

